Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
@thi.ng/random
Advanced tools
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
@thi.ng/random is a versatile library for generating random numbers and sequences. It provides various random number generators (RNGs) and utilities for creating random values, sequences, and distributions.
Basic Random Number Generation
This feature allows you to generate basic random numbers, both floating-point and integer values, using the default system RNG.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.float()); // Generates a random float between 0 and 1
console.log(rng.int()); // Generates a random integer
Seeded Random Number Generation
This feature allows you to create a seeded random number generator, which produces reproducible sequences of random numbers.
const { XsAdd } = require('@thi.ng/random');
const rng = new XsAdd(12345); // Seeded RNG
console.log(rng.float()); // Generates a reproducible random float
console.log(rng.int()); // Generates a reproducible random integer
Random Value Generation from Arrays
This feature allows you to randomly select values from an array, which is useful for shuffling or sampling data.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
const arr = [1, 2, 3, 4, 5];
console.log(rng.choice(arr)); // Randomly selects an element from the array
Random Distributions
This feature allows you to generate random numbers from various statistical distributions, such as normal (Gaussian) distributions.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.norm(0, 1)); // Generates a random number from a normal distribution with mean 0 and standard deviation 1
random-js is a library for generating random numbers and values. It provides a variety of RNGs and utilities for creating random values, similar to @thi.ng/random. However, random-js focuses more on providing a simple API for common randomization tasks.
seedrandom is a library for seeded random number generation. It allows you to create reproducible random sequences by providing a seed. While it offers fewer utilities compared to @thi.ng/random, it is highly focused on the quality and reproducibility of random numbers.
chance is a library for generating random data for various purposes, including numbers, strings, and even entire objects. It offers a broader range of random data generation compared to @thi.ng/random, which is more focused on numerical randomization.
[!NOTE] This is one of 199 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation.
[!IMPORTANT] In July 2024 this package was restructured and split-up to extract some features into smaller more focused packages:
This package provides the IRandom
interface and various (mostly seedable)
pseudo-random number generator implementations, incl. IRandom
wrappers for
Math.random()
(or other external PRNGs) and window.crypto
:
Partially ported from C implementations taken from c.thi.ng.
coin()
/ fairCoin()
pickRandom()
/ pickRandomKey()
randomBytes()
/ randomBytesFrom()
randomID()
weightedRandom()
/ weightedRandomKey()
uniqueIndices()
/ uniqueValuesFrom()
STABLE - used in production
Search or submit any issues for this package
yarn add @thi.ng/random
ESM import:
import * as rnd from "@thi.ng/random";
Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/random"></script>
For Node.js REPL:
const rnd = await import("@thi.ng/random");
Package sizes (brotli'd, pre-treeshake): ESM: 1.93 KB
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
18 projects in this repo's /examples directory are using this package:
Screenshot | Description | Live demo | Source |
---|---|---|---|
Self-modifying, animated typographic grid with emergent complex patterns | Demo | Source | |
Probabilistic color theme generator | Demo | Source | |
Interactive inverse FFT toy synth | Demo | Source | |
2D Bezier curve-guided particle system | Demo | Source | |
Basic hiccup-based canvas drawing | Demo | Source | |
Barnsley fern IFS fractal renderer | Demo | Source | |
k-means clustering visualization | Demo | Source | |
Randomized space-filling, nested grid layout generator | Demo | Source | |
Randomized 4-point 2D color gradient image generator | Demo | Source | |
Interactive pixel sorting tool using thi.ng/color & thi.ng/pixel | Demo | Source | |
Animated, iterative polygon subdivisions & visualization | Demo | Source | |
Procedural stochastic text generation via custom DSL, parse grammar & AST transformation | Demo | Source | |
Basic usage of thi.ng/rdom keyed list component wrapper | Demo | Source | |
Generative audio synth offline renderer and WAV file export | Demo | Source | |
Evolutionary shader generation using genetic programming | Demo | Source | |
Responsive & reactively computed stacked column layout | Demo | Source | |
thi.ng/rdom & thi.ng/rstream based quiz to guess thi.ng package names | Demo | Source | |
Game of Life implemented as WebGL2 multi-pass shader pipeline | Demo | Source |
import { Smush32 } from "@thi.ng/random";
const rnd = new Smush32(0xdecafbad);
// the following methods are available for all generators
// next uint (0 .. 2^32-1)
rnd.int()
// 4022849029
// next float [0.0 .. 1.0)
rnd.float()
// 0.2698542904737066
// next normalized float (w/ opt scale)
// [-scale .. +scale)
rnd.norm(100)
// 57.70723665079737
// next float in given interval [min .. max)
rnd.minmax(10, 20)
// 15.295951807707537
rnd.minmaxInt(10, 20)
If this project contributes to an academic publication, please cite it as:
@misc{thing-random,
title = "@thi.ng/random",
author = "Karsten Schmidt",
note = "https://thi.ng/random",
year = 2015
}
© 2015 - 2024 Karsten Schmidt // Apache License 2.0
FAQs
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation
We found that @thi.ng/random demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.